﻿using System;

namespace Ukagaka.Named.Ghost.Shiori
{
	/// <summary>
	/// ヘッダを表現します
	/// </summary>
	public class Header : IHeader
	{
		/// <summary>
		/// ヘッダの名前を取得します
		/// </summary>
		public string Name
		{
			get;
			set;
		}

		/// <summary>
		/// ヘッダの値を取得します
		/// </summary>
		public string Value
		{
			get;
			set;
		}

		/// <summary>
		/// ヘッダを初期化します
		/// </summary>
		/// <param name="header">ヘッダ</param>
		public Header( string header )
		{
			Parse( header );
		}

		/// <summary>
		/// ヘッダを初期化します
		/// </summary>
		/// <param name="name">ヘッダの名前</param>
		/// <param name="value">ヘッダの値</param>
		public Header( string name, string value )
		{
			Name = name;
			Value = value;
		}

		/// <summary>
		/// ヘッダを解析します
		/// </summary>
		/// <param name="header">ヘッダ</param>
		public virtual void Parse( string header )
		{
			var split = header.Split( new char[ ] { ':' }, 2, StringSplitOptions.RemoveEmptyEntries );

			Name = split[ 0 ].Trim( );
			Value = split[ 1 ].Trim( );
		}

		/// <summary>
		/// ヘッダを取得します
		/// </summary>
		/// <returns>ヘッダ</returns>
		public override string ToString( )
		{
			return string.Concat( Name, ": ", Value );
		}
	}

	/// <summary>
	/// ヘッダを表現するための定義です
	/// </summary>
	public interface IHeader : IParseable
	{
		/// <summary>
		/// ヘッダの名称を取得します
		/// </summary>
		string Name
		{
			get;
		}

		/// <summary>
		/// ヘッダの値を取得します
		/// </summary>
		string Value
		{
			get;
		}
	}
}
